/**
 *
 * <p>
 *
 * <p>
 * 版权所有，侵权必究！
 */

package com.base.commons.elasticsearch.service;

import com.base.commons.tools.page.PageData;

import java.util.List;


/**
 *  CRUD基础服务接口
 *
 * @author carl
 */
 public interface EsCrudService<T, D> extends EsBaseService<T>  {

    /**
     *  分页
     * @param  dto 查询条件
     * @return
     */
    PageData<D> esPage(Object dto);

    /**
     * 导出csv 工具类
     * @param <S> 目标类型
     * @param  csvPathId 每次请求生成唯一目录
     * @param  dto 查询条件
     * @param  size 每次返回条数  默认10000条
     * @param  pageSize  一个csv 文件导出量 默认 1000000 一百万
     * @return   返回csv 本地文件列表
     */
     <S> String[] exportCsvScroll(String csvPathId,
                                            Object dto,
                                            Long size, Long pageSize,Class<S> source) throws Exception;

    /**
     * 导出csv 工具类 动态表头
     * @param <S> 目标类型
     * @param  csvPathId 每次请求生成唯一目录
     * @param  dto 查询条件
     * @param  size 每次返回条数  默认10000条
     * @param  pageSize  一个csv 文件导出量 默认 1000000 一百万
     * @param dynamicHeader 动态表头部分
     * @return   返回csv 本地文件列表
     */
     <S> String[] exportCsvScrollDynamicTitle(String csvPathId,
                                            Object dto,
                                            Long size, Long pageSize,Class<S> source
             ,List<List<String>> dynamicHeader) throws Exception;
}